﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_Departments : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            StoreDepartment_LoadData();
        }
    }

    protected void RowSelect(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDepartment.SelectionModel.Primary as RowSelectionModel;

                int departID = Int32.Parse(rsm.SelectedRow.RecordID);
                Department depart = db.Departments.Single(d => d.DepID == departID);

                lblViewCodeDepart.Text = depart.CodeOfDep;
                lblViewNameDepart.Text = depart.NameOfDep;
                lblViewDesDepart.Text = depart.Descriptons;

                lblViewOrganization.Text = depart.Organization.NameOfOrgan;

                lblViewCommune.Text = depart.Organization.Commune.NameOfComm;
                lblViewDistrict.Text = depart.Organization.Commune.District.NameOfDist;
                lblViewProvince.Text = depart.Organization.Commune.District.Province.NameOfProvince;
                chkViewDistStatus.Checked = Boolean.Parse(depart.StatusOfDep.ToString());
            }

        }
        catch (Exception)
        {
            X.Msg.Notify("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void StoreDepartment_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
    {
        StoreDepartment_LoadData();
    }

    public void StoreDepartment_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                List<View_Departments> listDepart = db.View_Departments.ToList<View_Departments>();
                StoreDepartment.DataSource = listDepart;
                StoreDepartment.DataBind();

                GridPanelDepartment.ActiveIndex = -1;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void cbxProvinces_SelectedChange()
    {
        try
        {
            string provID = cbxProvinces.Value.ToString();
            if (provID.Equals(""))
            {
                StoreDistrict.DataSource = null;
                StoreDistrict.DataBind();
            }

            int proID = Int32.Parse(provID);
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                Province province = db.Provinces.Single(p => p.ProvID == proID);
                StoreDistrict.DataSource = province.Districts.ToList<District>();
                StoreDistrict.DataBind();

                StoreCommune.DataSource = new List<Commune>(); ;
                StoreCommune.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void cbxDistrict_SelectedChange()
    {
        try
        {
            string distSelect = cbxDistrict.Value.ToString();
            if (distSelect.Equals(""))
            {
                StoreCommune.DataSource = new List<Commune>(); ;
                StoreCommune.DataBind();
            }
            int distID = Int32.Parse(distSelect);
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                District province = db.Districts.Single(p => p.DistID == distID);
                StoreCommune.DataSource = province.Communes.ToList<Commune>();
                StoreCommune.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void cbxCommune_SelectedChange()
    {
        try
        {
            string comSelect = cbxCommune.Value.ToString();
            if (comSelect.Equals(""))
            {
                StoreOrganization.DataSource = new List<Commune>(); ;
                StoreOrganization.DataBind();
            }
            int comID = Int32.Parse(comSelect);
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                Commune comuune = db.Communes.Single(c => c.ComID == comID);
                StoreOrganization.DataSource = comuune.Organizations.ToList<Organization>();
                StoreOrganization.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnToobarAdd_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                WindownAdd.Hidden = false;
                ResetControls_WindownAdd();

                List<Province> listProv = db.Provinces.ToList<Province>();
                SortObjectsProvinces sort = new SortObjectsProvinces();
                listProv.Sort(sort.Compare_ProvinceName_ASC);
                storeProvince.DataSource = listProv;
                storeProvince.DataBind();

                StoreDistrict.DataSource = new List<District>();
                StoreDistrict.DataBind();

                StoreCommune.DataSource = new List<Commune>(); ;
                StoreCommune.DataBind();

                StoreOrganization.DataSource = new List<Organization>();
                StoreOrganization.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void menuItemAdd_DirectClick(object sender, DirectEventArgs e)
    {
        lblFormAddMsg.Text = "";

        if (cbxProvinces.Value.ToString().Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn tỉnh thành";
            return;
        }
        if (cbxDistrict.Value.ToString().Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn quận huyện";
            return;
        }
        if (cbxCommune.Value.ToString().Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn xã phường";
            return;
        }
        if (cbxOrganization.Value.ToString().Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn cơ quan";
            return;
        }
        if (txtFormAddCodeDepartment.Text.Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Mã phòng ban không được để trống";
            txtFormAddCodeDepartment.Focus(true, 100);
            return;
        }
        if (txtFormAddNameDepartment.Text.Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Tên phòng ban không được để trống";
            txtFormAddNameDepartment.Focus(true, 100);
            return;
        }
        if (txtFormAddDes.Text.Trim().Equals(""))
        {
            lblFormAddMsg.Text = "Mô tả phòng ban không được để trống";
            txtFormAddDes.Focus(true, 100);
            return;
        }

        try
        {

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string code = txtFormAddCodeDepartment.Text.Trim();
                foreach (var item in db.Departments.ToList<Department>())
                {
                    if (item.CodeOfDep.ToLower().Equals(code.ToLower()))
                    {
                        lblFormAddMsg.Text = "Mã cơ quan đã được sử dụng, hãy nhập mã khác";
                        return;
                    }
                }

                Department depart = new Department()
                {
                    OrgID = Int32.Parse(cbxOrganization.Value.ToString()),
                    CodeOfDep = code,
                    NameOfDep = txtFormAddNameDepartment.Text.Trim(),
                    Descriptons = txtFormAddDes.Text.Trim(),
                    StatusOfDep = Boolean.Parse(chkFormAddStatus.Checked.ToString())
                };

                db.Departments.Add(depart);
                db.SaveChanges();
                WindownAdd.Hidden = true;
                StoreDepartment_LoadData();
                X.Msg.Notify("Thông báo", "Thêm mới phòng ban thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();

        }
    }

    protected void btnAddCancel_DirectClick(object sender, DirectEventArgs e)
    {
        WindownAdd.Hidden = true;
    }

    protected void btnUpdateSave_DirectClick(object sender, DirectEventArgs e)
    {
        lblUpdateMsg.Text = "";

        if (txtUpdateCode.Text.Trim().Equals(""))
        {
            lblUpdateMsg.Text = "Mã phòng ban không được để trống";
            txtUpdateCode.Focus(true, 100);
            return;
        }
        if (txtUpdateName.Text.Trim().Equals(""))
        {
            lblUpdateMsg.Text = "Tên phòng ban không được để trống";
            txtUpdateName.Focus(true, 100);
            return;
        }
        if (txtUpdateDes.Text.Trim().Equals(""))
        {
            lblUpdateMsg.Text = "Mô tả phòng ban không được để trống";
            txtUpdateDes.Focus(true, 100);
            return;
        }

        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDepartment.SelectionModel.Primary as RowSelectionModel;
                int departID = Int32.Parse(rsm.SelectedRow.RecordID);
                Department depart = db.Departments.Single(d => d.DepID == departID);

                string code = txtUpdateCode.Text.Trim();
                string currentName = txtUpdateName.Text.Trim();

                foreach (var item in db.Departments)
                {
                    if (item.CodeOfDep.ToLower().Equals(code.ToLower()) && item.DepID != depart.DepID)
                    {
                        lblUpdateMsg.Text = "Mã cơ quan đã được sử dụng, hãy nhập mã khác";
                        return;
                    }
                }

                Organization org = db.Organizations.Single(o => o.OrgID == depart.OrgID);

                foreach (var item in org.Departments.ToList<Department>())
                {
                    if (item.NameOfDep.ToLower().Equals(currentName.ToLower()) && item.DepID != depart.DepID)
                    {
                        lblUpdateMsg.Text = "Trong cơ quan tổ chức đã  có phòng ban này";
                        return;
                    }
                }
                depart.CodeOfDep = code;
                depart.NameOfDep = currentName;
                depart.Descriptons = txtUpdateDes.Text.Trim();
                depart.StatusOfDep = chkUpdateStatus.Checked;

                db.SaveChanges();
                WindowUpdate.Hidden = true;

                StoreDepartment_LoadData();
                X.Msg.Notify("Thông báo", "Cập nhật thông tin phòng ban thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnUpdateCacel_DirectClick(object sender, DirectEventArgs e)
    {
        WindowUpdate.Hidden = true;
    }

    protected void btnToobarUpdate_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            RowSelectionModel rsm = null;
            try
            {
                rsm = GridPanelDepartment.SelectionModel.Primary as RowSelectionModel;
            }
            catch (Exception)
            {
                X.Msg.Alert("Thông báo", "Bạn phải chọn một phòng ban để chỉnh sửa thông tin").Show();
                return;
            }
            if (rsm.SelectedRow == null)
            {
                X.Msg.Alert("Thông báo", "Bạn phải chọn một phòng ban để chỉnh sửa thông tin").Show();
                return;
            }
            else
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    int departID = Int32.Parse(rsm.SelectedRow.RecordID);
                    Department depart = db.Departments.Single(d => d.DepID == departID);

                    WindowUpdate.Hidden = false;
                    lblUpdateMsg.Text = "";

                    txtUpdatePro.Text = depart.Organization.Commune.District.Province.NameOfProvince;
                    txtUpdateDist.Text = depart.Organization.Commune.District.NameOfDist;
                    txtUpdateComm.Text = depart.Organization.Commune.NameOfComm;
                    txtUpdateOrg.Text = depart.Organization.NameOfOrgan;

                    txtUpdateCode.Text = depart.CodeOfDep;
                    txtUpdateName.Text = depart.NameOfDep;
                    txtUpdateDes.Text = depart.Descriptons;
                    chkUpdateStatus.Checked = Boolean.Parse(depart.StatusOfDep.ToString());
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnToobarDelete_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            RowSelectionModel rsm = null;
            try
            {
                rsm = GridPanelDepartment.SelectionModel.Primary as RowSelectionModel;
            }
            catch (Exception)
            {
                X.Msg.Alert("Thông báo", "Bạn phải chọn một phòng ban để xóa bỏ").Show();
                return;
            }
            if (rsm.SelectedRow == null)
            {
                X.Msg.Alert("Thông báo", "Bạn phải chọn một phòng ban để xóa bỏ").Show();
                return;
            }
            else
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    int departID = Int32.Parse(rsm.SelectedRow.RecordID);
                    Department depart = db.Departments.Single(d => d.DepID == departID);

                    X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa phòng ban đã chọn ? [{0}]", depart.NameOfDep),
                        new MessageBoxButtonsConfig()
                        {
                            Yes = new MessageBoxButtonConfig
                            {
                                Text = "Xóa",
                                Handler = "App.direct.DoYes_DeleteDepartment();"
                            },
                            No = new MessageBoxButtonConfig
                            {
                                Text = "Hủy bỏ"
                            }
                        }).Show();
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteDepartment()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelDepartment.SelectionModel.Primary as RowSelectionModel;
                int depID = Int32.Parse(rsm.SelectedRow.RecordID);
                Department depart = db.Departments.Single(d => d.DepID == depID);

                db.Departments.Remove(depart);
                db.SaveChanges();

                ResetControls_FormView();
                StoreDepartment_LoadData();

                X.Msg.Notify("Thông báo", "Xóa phòng ban thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }
    }

    private void ResetControls_WindownAdd()
    {
        lblFormAddMsg.Text = "";

        StoreDistrict.DataSource = new List<Object>();
        StoreDistrict.DataBind();

        StoreCommune.DataSource = new List<Object>();
        StoreCommune.DataBind();

        StoreOrganization.DataSource = new List<Object>();
        StoreOrganization.DataBind();

        cbxProvinces.Value = "";
        txtFormAddCodeDepartment.Text = "";
        txtFormAddNameDepartment.Text = "";
        txtFormAddDes.Text = "";
        chkFormAddStatus.Checked = false;
    }

    private void ResetControls_FormView()
    {
        lblViewProvince.Text = "";
        lblViewDistrict.Text = "";
        lblViewCommune.Text = "";
        lblViewOrganization.Text = "";

        lblViewCodeDepart.Text = "";
        lblViewNameDepart.Text = "";
        lblViewDesDepart.Text = "";
        chkViewDistStatus.Checked = false;
    }
}